home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbmon.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-06-25  |  3.8 KB  |  149 lines

  1. (*===========================================================================*)
  2. (* Monitored data handler                                                    *)
  3. (*                                                                           *)
  4. (*   Copyright 1988, 1989, 1990 by H. Roy Engehausen.  All rights reserved.  *)
  5. (*   This software may be freely distributed and used, but it may not        *)
  6. (*   under any circumstances be sold by anyone other than the author.        *)
  7. (*   It may be distributed by a commercial company as long as it is          *)
  8. (*   for no cost.                                                            *)
  9. (*                                                                           *)
  10. (*===========================================================================*)
  11.  
  12. {$O+}
  13.  
  14. UNIT BBMON;
  15.  
  16. INTERFACE
  17.  
  18. PROCEDURE monitor_init;
  19. PROCEDURE monitor_up;
  20.  
  21. IMPLEMENTATION
  22.  
  23. USES
  24.   DOS,
  25.   bbaux,
  26.   bbdummy,
  27.   bbmisc,
  28.   bbsema2,
  29.   bbtime;
  30.  
  31. PROCEDURE write_port_mon(p : port_block_ptr); FORWARD;
  32.  
  33. VAR
  34.   m_file   : FILE OF port_call_item;
  35.  
  36. (*===========================================================================*)
  37. (* Initialize monitor                                                        *)
  38. (*===========================================================================*)
  39.  
  40. PROCEDURE monitor_init;
  41.  
  42.   VAR
  43.     b        : BOOLEAN;
  44.     i        : INTEGER;
  45.     m_buffer : port_call_item;
  46.     save_p   : port_block_ptr;
  47.  
  48.   BEGIN;
  49.  
  50.     ASSIGN(m_file, opt_block.mon_fn);
  51.  
  52.     {$I-}
  53.     RESET(m_file);
  54.     i := IORESULT;
  55.     {$I+}
  56.  
  57.     save_p := active_port;
  58.  
  59.     IF i = 0  THEN
  60.       BEGIN;
  61.  
  62.         WHILE NOT EOF(m_file) DO
  63.           BEGIN;
  64.             READ(m_file, m_buffer);
  65.             WITH m_buffer DO
  66.               BEGIN;
  67.  
  68.                 IF port_call_port < 'A' THEN
  69.                   BEGIN;
  70.                     b := TRUE;
  71.                     active_port := @dummy_port;
  72.                   END
  73.                 ELSE
  74.                   b := find_port(port_call_port);
  75.  
  76.                 IF b THEN
  77.                   WITH active_port^ DO
  78.                     BEGIN;
  79.                       i := 1;
  80.                       WHILE (i <= opt_block.n_mon) AND
  81.                                         (call_list^[i].port_call_date <> '') DO
  82.                         INC(i);
  83.                       IF i <= opt_block.n_mon THEN
  84.                         call_list^[i] := m_buffer;
  85.                     END;
  86.               END;
  87.           END;
  88.  
  89.         active_port          := save_p;
  90.         active_tcb^.tcb_port := save_p;
  91.  
  92.         CLOSE(m_file);
  93.  
  94.       END;
  95.   END;
  96.  
  97. (*===========================================================================*)
  98. (* Update monitor file                                                       *)
  99. (*===========================================================================*)
  100.  
  101. PROCEDURE monitor_up;
  102.  
  103.   VAR
  104.     i : BYTE;
  105.     p : port_block_ptr;
  106.  
  107.   BEGIN;
  108.  
  109.     get_semaphore(semaphore_interrupts, sem_exclusive, FALSE);
  110.  
  111.     REWRITE(m_file);
  112.  
  113.     write_port_mon(@dummy_port);
  114.  
  115.     p := ring_port;
  116.     REPEAT
  117.       write_port_mon(p);
  118.       p := p^.next_port;
  119.     UNTIL p = ring_port;
  120.  
  121.     CLOSE(m_file);
  122.  
  123.     free_semaphore(semaphore_interrupts);
  124.  
  125.     time_mon := up_time_from_now(10*60);
  126.  
  127.   END;
  128.  
  129. (*===========================================================================*)
  130. (* Write a port to monitor file                                              *)
  131. (*===========================================================================*)
  132.  
  133. PROCEDURE write_port_mon(p : port_block_ptr);
  134.  
  135.   VAR
  136.     i : BYTE;
  137.  
  138.   BEGIN;
  139.     WITH p^ DO
  140.       FOR i := 1 TO opt_block.n_mon DO
  141.         BEGIN;
  142.           IF call_list^[i].port_call_date = '' THEN
  143.             EXIT;
  144.           WRITE(m_file, call_list^[i]);
  145.         END;
  146.   END;
  147.  
  148. END.
  149.